function [x] = Reproduction(p)
global POP_SIZE K PRECISION Pmut REPRODUCTION_METHOD;

parents = p;
%para cada par, intercambiamos un bit al azar, y generamos 2 hijos
%TODO: consultar si tiene que quedar un hijo o los 2!!!!!
switch REPRODUCTION_METHOD
    case 'METODO1'
        for i=1:K-1
            bit = randint(1,1,[1 PRECISION]);
            swap = parents(i,bit);
            parents(i,bit) = parents(i+1, bit);
            parents(i+1, bit) = swap;

            %Pmut es la probabilidad de que mute 1 bit
            %multiplicamos por PRECISION para ver la probabilidad de que mute
            % el individuo y si tiene que mutar, elijo un bit al azar y lo NOTeo
            if(rand() < Pmut*PRECISION)
                mutante = randint(1,1,[1 PRECISION]);
                parents(i,mutante) = not(parents(i,mutante));
            end
            if(rand() < Pmut*PRECISION)
                mutante = randint(1,1,[1 PRECISION]);
                parents(i+1,mutante) = not(parents(i+1,mutante));
            end
            i=i+1;
        end
    case 'METODO2'
        for i=1:K-1
            bit = randint(1,1,[1 PRECISION]);
            for j=0:(PRECISION-bit)
                swap = parents(i,bit+j);
                parents(i,bit+j) = parents(i+1, bit+j);
                parents(i+1, bit+j) = swap;
            end
        end
end

x = parents;
